<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/12/10
 * Time: 18:20
 */

namespace wechat\util;

use EasyWeChat\Factory;
use Symfony\Component\Cache\Simple\RedisCache;

class WechatPlatform
{
    //创建静态私有的变量保存该类对象
    static private $instance_open;
    static private $instance_officia;
    static private $redis_host = '127.0.0.1';


    //参数
    static private $config_open = [
        'app_id' => 'wx4d4f4223cf13435e',
        'secret' => '6b9ee8488023a299ecc874ddf104e3c3',
        'token' => 'J91A56Z5I42eG51g45VAv53a4vZ44O9d',
        'aes_key' => 'N68B2A2Mvm2A65rzA8855vXZ8n2KmV8gKQ82RKCaCK5'
    ];

    //参数
    static private $config_officia = [
        'app_id' => 'wx20b6c37bb8974e48',
        'secret' => '349e5750fb16e9f5ee96a4afaa393b1f',
        'token' => 'rwf44WPW45P5qS95WqZF4Jh3W8e84eOw',
        'aes_key' => 'Ce7udE7B8LppLip8GvY7L7WLLVDD7Zl7Y7LLy7V6lpP',                    // EncodingAESKey，兼容与安全模式下请一定要填写！！！
        'response_type' => 'array',
        /**
         * 日志配置
         *
         * level: 日志级别, 可选为：
         *         debug/info/notice/warning/error/critical/alert/emergency
         * path：日志文件位置(绝对路径!!!)，要求可写权限
         */
        'log' => [
            'default' => 'prod', // 默认使用的 channel，生产环境可以改为下面的 prod
            'channels' => [
                // 测试环境
                'dev' => [
                    'driver' => 'single',
                    'path' => 'C:/tmp/easywechat.log',
                    'level' => 'debug',
                ],
                // 生产环境
                'prod' => [
                    'driver' => 'daily',
                    'path' => 'C:/tmp/easywechat.log',
                    'level' => 'info',
                ],
            ],
        ],
        /**
         * 接口请求相关配置，超时时间等，具体可用参数请参考：
         * http://docs.guzzlephp.org/en/stable/request-config.html
         *
         * - retries: 重试次数，默认 1，指定当 http 请求失败时重试的次数。
         * - retry_delay: 重试延迟间隔（单位：ms），默认 500
         * - log_template: 指定 HTTP 日志模板，请参考：https://github.com/guzzle/guzzle/blob/master/src/MessageFormatter.php
         */
        'http' => [
            'max_retries' => 1,
            'retry_delay' => 500,
            'timeout' => 5.0,
            // 'base_uri' => 'https://api.weixin.qq.com/', // 如果你在国外想要覆盖默认的 url 的时候才使用，根据不同的模块配置不同的 uri
        ],
        /**
         * OAuth 配置
         *
         * scopes：公众平台（snsapi_userinfo / snsapi_base），开放平台：snsapi_login
         * callback：OAuth授权完成后的回调页地址
         */
        'oauth' => [
            'scopes' => ['snsapi_userinfo'],
            'callback' => '/wechat/callback_officia.php',
        ],
    ];

    //防止直接创建对象
    private function __construct()
    {

    }

    //防止克隆对象
    private function __clone()
    {

    }

    static public function getOpenPlatformInstance()
    {
        //没有则创建
        if (!self::$instance_open != null) {
            $openPlatform = Factory::openPlatform(self::$config_open);
            $redis = new \Redis();
            $redis->connect(self::$redis_host, 6379);
            $cache = new RedisCache($redis);
            // 替换应用中的缓存
            $openPlatform->rebind('cache', $cache);
            self::$instance_open = $openPlatform;
        }
        return self::$instance_open;
    }

    static public function getOfficiaInstance()
    {
        //没有则创建
        if (!self::$instance_officia != null) {
            $app = Factory::officialAccount(self::$config_officia);
            // 创建 redis 实例
            $redis = new \Redis();
            $redis->connect(self::$redis_host, 6379);
            // 创建缓存实例
            $cache = new RedisCache($redis);
            // 替换应用中的缓存
            $app->rebind('cache', $cache);
            self::$instance_officia = $app;
        }
        return self::$instance_officia;
    }

}